Autogenerated HTML docs for v2.26.0-51-ga7d14 
diff --git a/RelNotes/2.27.0.txt b/RelNotes/2.27.0.txt new file mode 100644 index 0000000..84eab73 --- /dev/null +++ b/RelNotes/2.27.0.txt 
@@ -0,0 +1,41 @@ +Git 2.27 Release Notes +====================== + +Updates since v2.26 +------------------- + +UI, Workflows & Features + + * A handful of options to configure SSL when talking to proxies have + been added. + + +Performance, Internal Implementation, Development Support etc. + + * The advise API has been revamped to allow more systematic enumeration of + advice knobs in the future. + + +Fixes since v2.26 +----------------- + + * The real_path() convenience function can easily be misused; with a + bit of code refactoring in the callers' side, its use has been + eliminated. + (merge 49d3c4b481 am/real-path-fix later to maint). + + * Update "git p4" to work with Python 3. + (merge 6bb40ed20a yz/p4-py3 later to maint). + + * The mechanism to prevent "git commit" from making an empty commit + or amending during an interrupted cherry-pick was broken during the + rewrite of "git rebase" in C, which has been corrected. + (merge 430b75f720 pw/advise-rebase-skip later to maint). + + * Other code cleanup, docfix, build fix, etc. + (merge 564956f358 jc/maintain-doc later to maint). + (merge 7422b2a0a1 sg/commit-slab-clarify-peek later to maint). + (merge 9c688735f6 rs/doc-passthru-fetch-options later to maint). + (merge 757c2ba3e2 en/oidset-uninclude-hashmap later to maint). + (merge 8312aa7d74 jc/config-tar later to maint). + (merge d00a5bdd50 ss/submodule-foreach-cb later to maint). 
diff --git a/config.txt b/config.txt index 08b13ba..2450589 100644 --- a/config.txt +++ b/config.txt 
@@ -447,6 +447,8 @@    include::config/tag.txt[]   +include::config/tar.txt[] +  include::config/trace2.txt[]    include::config/transfer.txt[] 
diff --git a/fetch-options.txt b/fetch-options.txt index a115a1a..00d03ec 100644 --- a/fetch-options.txt +++ b/fetch-options.txt 
@@ -61,10 +61,8 @@  See also the `fetch.negotiationAlgorithm` configuration variable  documented in linkgit:git-config[1].   -ifndef::git-pull[]  --dry-run:: 	Show what would be done, without making any changes. -endif::git-pull[]    -f::  --force:: @@ -95,6 +93,7 @@  --[no-]write-commit-graph:: 	Write a commit-graph after fetching. This overrides the config 	setting `fetch.writeCommitGraph`. +endif::git-pull[]    -p::  --prune:: @@ -107,6 +106,7 @@ 	was cloned with the --mirror option), then they are also 	subject to pruning. Supplying `--prune-tags` is a shorthand for 	providing the tag refspec. +ifndef::git-pull[]  +  See the PRUNING section below for more details.   @@ -133,7 +133,6 @@ 	behavior for a remote may be specified with the remote.<name>.tagOpt 	setting. See linkgit:git-config[1].   -ifndef::git-pull[]  --refmap=<refspec>:: 	When fetching refs listed on the command line, use the 	specified refspec (can be given more than once) to map the @@ -154,6 +153,7 @@ 	is used (though tags may be pruned anyway if they are also the 	destination of an explicit refspec; see `--prune`).   +ifndef::git-pull[]  --recurse-submodules[=yes|on-demand|no]:: 	This option controls if and under what conditions new commits of 	populated submodules should be fetched too. It can be used as a @@ -164,6 +164,7 @@ 	when the superproject retrieves a commit that updates the submodule's 	reference to a commit that isn't already in the local submodule 	clone. +endif::git-pull[]    -j::  --jobs=<n>:: @@ -177,9 +178,11 @@  Typically, parallel recursive and multi-remote fetches will be faster. By  default fetches are performed sequentially, not in parallel.   +ifndef::git-pull[]  --no-recurse-submodules:: 	Disable recursive fetching of submodules (this has the same effect as 	using the `--recurse-submodules=no` option). +endif::git-pull[]    --set-upstream:: 	If the remote is fetched successfully, pull and add upstream @@ -188,6 +191,7 @@ 	see `branch.<name>.merge` and `branch.<name>.remote` in 	linkgit:git-config[1].   +ifndef::git-pull[]  --submodule-prefix=<path>:: 	Prepend <path> to paths printed in informative messages 	such as "Fetching submodule foo". This option is used 
diff --git a/git-config.html b/git-config.html index 99543e1..ac0bd68 100644 --- a/git-config.html +++ b/git-config.html 
@@ -5992,6 +5992,47 @@  </div></div>   </dd>   <dt class="hdlist1">  +http.proxySSLCert  +</dt>  +<dd>  +<p>  + The pathname of a file that stores a client certificate to use to authenticate  + with an HTTPS proxy. Can be overridden by the <code>GIT_PROXY_SSL_CERT</code> environment  + variable.  +</p>  +</dd>  +<dt class="hdlist1">  +http.proxySSLKey  +</dt>  +<dd>  +<p>  + The pathname of a file that stores a private key to use to authenticate with  + an HTTPS proxy. Can be overridden by the <code>GIT_PROXY_SSL_KEY</code> environment  + variable.  +</p>  +</dd>  +<dt class="hdlist1">  +http.proxySSLCertPasswordProtected  +</dt>  +<dd>  +<p>  + Enable Git&#8217;s password prompt for the proxy SSL certificate. Otherwise OpenSSL  + will prompt the user, possibly many times, if the certificate or private key  + is encrypted. Can be overriden by the <code>GIT_PROXY_SSL_CERT_PASSWORD_PROTECTED</code>  + environment variable.  +</p>  +</dd>  +<dt class="hdlist1">  +http.proxySSLCAInfo  +</dt>  +<dd>  +<p>  + Pathname to the file containing the certificate bundle that should be used to  + verify the proxy with when using an HTTPS proxy. Can be overriden by the  + <code>GIT_PROXY_SSL_CAINFO</code> environment variable.  +</p>  +</dd>  +<dt class="hdlist1">   http.emptyAuth   </dt>   <dd>  
diff --git a/git-pull.html b/git-pull.html index 53be312..bf0f782 100644 --- a/git-pull.html +++ b/git-pull.html 
@@ -1260,6 +1260,14 @@  documented in <a href="git-config.html">git-config(1)</a>.</p></div>   </dd>   <dt class="hdlist1">  +--dry-run  +</dt>  +<dd>  +<p>  + Show what would be done, without making any changes.  +</p>  +</dd>  +<dt class="hdlist1">   -f   </dt>   <dt class="hdlist1">  @@ -1286,6 +1294,25 @@  </p>   </dd>   <dt class="hdlist1">  +-p  +</dt>  +<dt class="hdlist1">  +--prune  +</dt>  +<dd>  +<p>  + Before fetching, remove any remote-tracking references that no  + longer exist on the remote. Tags are not subject to pruning  + if they are fetched only because of the default tag  + auto-following or due to a --tags option. However, if tags  + are fetched due to an explicit refspec (either on the command  + line or in the remote configuration, for example if the remote  + was cloned with the --mirror option), then they are also  + subject to pruning. Supplying <code>--prune-tags</code> is a shorthand for  + providing the tag refspec.  +</p>  +</dd>  +<dt class="hdlist1">   --no-tags   </dt>   <dd>  @@ -1298,6 +1325,67 @@  </p>   </dd>   <dt class="hdlist1">  +--refmap=&lt;refspec&gt;  +</dt>  +<dd>  +<p>  + When fetching refs listed on the command line, use the  + specified refspec (can be given more than once) to map the  + refs to remote-tracking branches, instead of the values of  + <code>remote.*.fetch</code> configuration variables for the remote  + repository. Providing an empty <code>&lt;refspec&gt;</code> to the  + <code>--refmap</code> option causes Git to ignore the configured  + refspecs and rely entirely on the refspecs supplied as  + command-line arguments. See section on "Configured Remote-tracking  + Branches" for details.  +</p>  +</dd>  +<dt class="hdlist1">  +-t  +</dt>  +<dt class="hdlist1">  +--tags  +</dt>  +<dd>  +<p>  + Fetch all tags from the remote (i.e., fetch remote tags  + <code>refs/tags/*</code> into local tags with the same name), in addition  + to whatever else would otherwise be fetched. Using this  + option alone does not subject tags to pruning, even if --prune  + is used (though tags may be pruned anyway if they are also the  + destination of an explicit refspec; see <code>--prune</code>).  +</p>  +</dd>  +<dt class="hdlist1">  +-j  +</dt>  +<dt class="hdlist1">  +--jobs=&lt;n&gt;  +</dt>  +<dd>  +<p>  + Number of parallel children to be used for all forms of fetching.  +</p>  +<div class="paragraph"><p>If the <code>--multiple</code> option was specified, the different remotes will be fetched  +in parallel. If multiple submodules are fetched, they will be fetched in  +parallel. To control them independently, use the config settings  +<code>fetch.parallel</code> and <code>submodule.fetchJobs</code> (see <a href="git-config.html">git-config(1)</a>).</p></div>  +<div class="paragraph"><p>Typically, parallel recursive and multi-remote fetches will be faster. By  +default fetches are performed sequentially, not in parallel.</p></div>  +</dd>  +<dt class="hdlist1">  +--set-upstream  +</dt>  +<dd>  +<p>  + If the remote is fetched successfully, pull and add upstream  + (tracking) reference, used by argument-less  + <a href="git-pull.html">git-pull(1)</a> and other commands. For more information,  + see <code>branch.&lt;name&gt;.merge</code> and <code>branch.&lt;name&gt;.remote</code> in  + <a href="git-config.html">git-config(1)</a>.  +</p>  +</dd>  +<dt class="hdlist1">   -u   </dt>   <dt class="hdlist1">  
diff --git a/howto-index.html b/howto-index.html index c55997b..d7c150a 100644 --- a/howto-index.html +++ b/howto-index.html 
@@ -885,7 +885,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-22 18:02:57 PDT  + 2020-03-25 14:27:26 PDT   </div>   </div>   </body>  
diff --git a/howto/keep-canonical-history-correct.html b/howto/keep-canonical-history-correct.html index 4e53591..763dbf5 100644 --- a/howto/keep-canonical-history-correct.html +++ b/howto/keep-canonical-history-correct.html 
@@ -938,7 +938,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-22 18:03:02 PDT  + 2020-03-25 14:28:48 PDT   </div>   </div>   </body>  
diff --git a/howto/maintain-git.html b/howto/maintain-git.html index ae89510..b5faba3 100644 --- a/howto/maintain-git.html +++ b/howto/maintain-git.html 
@@ -974,7 +974,8 @@  Anything unobvious that is applicable to <em>master</em> (in other   words, does not depend on anything that is still in <em>next</em>   and not in <em>master</em>) is applied to a new topic branch that  - is forked from the tip of <em>master</em>. This includes both  + is forked from the tip of <em>master</em> (or the last feature release,  + which is a bit older than <em>master</em>). This includes both   enhancements and unobvious fixes to <em>master</em>. A topic   branch is named as ai/topic where "ai" is two-letter string   named after author&#8217;s initial and "topic" is a descriptive name  @@ -984,8 +985,9 @@  <li>   <p>   An unobvious fix meant for <em>maint</em> is applied to a new  - topic branch that is forked from the tip of <em>maint</em>. The  - topic is named as ai/maint-topic.  + topic branch that is forked from the tip of <em>maint</em> (or the  + oldest and still relevant maintenance branch). The  + topic may be named as ai/maint-topic.   </p>   </li>   <li>  @@ -1011,7 +1013,7 @@  </p>   <div class="literalblock">   <div class="content">  -<pre><code>The above except the "replacement" are all done with:</code></pre>  +<pre><code>The initial round is done with:</code></pre>   </div></div>   <div class="literalblock">   <div class="content">  @@ -1020,27 +1022,48 @@  </div></div>   <div class="literalblock">   <div class="content">  -<pre><code>while patch replacement is often done by:</code></pre>  +<pre><code>and replacing an existing topic with subsequent round is done with:</code></pre>   </div></div>   <div class="literalblock">   <div class="content">  -<pre><code>$ git format-patch ai/topic~$n..ai/topic ;# export existing</code></pre>  +<pre><code>$ git checkout master...ai/topic ;# try to reapply to the same base  +$ git am -sc3 mailbox</code></pre>   </div></div>   <div class="literalblock">   <div class="content">  -<pre><code>then replace some parts with the new patch, and reapplying:</code></pre>  +<pre><code>to prepare the new round on a detached HEAD, and then</code></pre>   </div></div>   <div class="literalblock">   <div class="content">  -<pre><code>$ git checkout ai/topic  -$ git reset --hard ai/topic~$n  -$ git am -sc3 -s 000*.txt</code></pre>  +<pre><code>$ git range-diff @{-1}...  +$ git diff @{-1}</code></pre>   </div></div>   <div class="literalblock">   <div class="content">  -<pre><code>The full test suite is always run for 'maint' and 'master'  -after patch application; for topic branches the tests are run  -as time permits.</code></pre>  +<pre><code>to double check what changed since the last round, and finally</code></pre>  +</div></div>  +<div class="literalblock">  +<div class="content">  +<pre><code>$ git checkout -B @{-1}</code></pre>  +</div></div>  +<div class="literalblock">  +<div class="content">  +<pre><code>to conclude (the last step is why a topic already in 'next' is  +not replaced but updated incrementally).</code></pre>  +</div></div>  +<div class="literalblock">  +<div class="content">  +<pre><code>Whether it is the initial round or a subsequent round, the topic  +may not build even in isolation, or may break the build when  +merged to integration branches due to bugs. There may already  +be obvious and trivial improvements suggested on the list. The  +maintainer often adds an extra commit, with "SQUASH???" in its  +title, to fix things up, before publishing the integration  +branches to make it usable by other developers for testing.  +These changes are what the maintainer is not 100% committed to  +(trivial typofixes etc. are often squashed directly into the  +patches that need fixing, without being applied as a separate  +"SQUASH???" commit), so that they can be removed easily as needed.</code></pre>   </div></div>   </li>   <li>  @@ -1346,6 +1369,17 @@  <em>master</em> branch typically is.   </p>   </li>  +<li>  +<p>  +Due to the nature of "SQUASH???" fix-ups, if the original author  + agrees with the suggested changes, it is OK to squash them to  + appropriate patches in the next round (when the suggested change  + is small enough, the author should not even bother with  + "Helped-by"). It is also OK to drop them from the next round  + when the original author does not agree with the suggestion, but  + the author is expected to say why somewhere in the discussion.  +</p>  +</li>   </ul></div>   </div>   </div>  @@ -1435,7 +1469,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-22 18:03:02 PDT  + 2020-03-25 14:28:48 PDT   </div>   </div>   </body>  
diff --git a/howto/maintain-git.txt b/howto/maintain-git.txt index ca43787..73be8b4 100644 --- a/howto/maintain-git.txt +++ b/howto/maintain-git.txt 
@@ -154,15 +154,17 @@  - Anything unobvious that is applicable to 'master' (in other  words, does not depend on anything that is still in 'next'  and not in 'master') is applied to a new topic branch that - is forked from the tip of 'master'. This includes both + is forked from the tip of 'master' (or the last feature release, + which is a bit older than 'master'). This includes both  enhancements and unobvious fixes to 'master'. A topic  branch is named as ai/topic where "ai" is two-letter string  named after author's initial and "topic" is a descriptive name  of the topic (in other words, "what's the series is about").    - An unobvious fix meant for 'maint' is applied to a new - topic branch that is forked from the tip of 'maint'. The - topic is named as ai/maint-topic. + topic branch that is forked from the tip of 'maint' (or the + oldest and still relevant maintenance branch). The + topic may be named as ai/maint-topic.    - Changes that pertain to an existing topic are applied to  the branch, but: @@ -174,24 +176,40 @@  - Replacement patches to an existing topic are accepted only  for commits not in 'next'.   - The above except the "replacement" are all done with: + The initial round is done with:    $ git checkout ai/topic ;# or "git checkout -b ai/topic master"  $ git am -sc3 mailbox   - while patch replacement is often done by: + and replacing an existing topic with subsequent round is done with:   - $ git format-patch ai/topic~$n..ai/topic ;# export existing + $ git checkout master...ai/topic ;# try to reapply to the same base + $ git am -sc3 mailbox   - then replace some parts with the new patch, and reapplying: + to prepare the new round on a detached HEAD, and then   - $ git checkout ai/topic - $ git reset --hard ai/topic~$n - $ git am -sc3 -s 000*.txt + $ git range-diff @{-1}... + $ git diff @{-1}   - The full test suite is always run for 'maint' and 'master' - after patch application; for topic branches the tests are run - as time permits. + to double check what changed since the last round, and finally + + $ git checkout -B @{-1} + + to conclude (the last step is why a topic already in 'next' is + not replaced but updated incrementally). + + Whether it is the initial round or a subsequent round, the topic + may not build even in isolation, or may break the build when + merged to integration branches due to bugs. There may already + be obvious and trivial improvements suggested on the list. The + maintainer often adds an extra commit, with "SQUASH???" in its + title, to fix things up, before publishing the integration + branches to make it usable by other developers for testing. + These changes are what the maintainer is not 100% committed to + (trivial typofixes etc. are often squashed directly into the + patches that need fixing, without being applied as a separate + "SQUASH???" commit), so that they can be removed easily as needed. +    - Merge maint to master as needed:   @@ -371,6 +389,14 @@  be included in the next feature release. Being in the  'master' branch typically is.   + * Due to the nature of "SQUASH???" fix-ups, if the original author + agrees with the suggested changes, it is OK to squash them to + appropriate patches in the next round (when the suggested change + is small enough, the author should not even bother with + "Helped-by"). It is also OK to drop them from the next round + when the original author does not agree with the suggestion, but + the author is expected to say why somewhere in the discussion. +    Appendix  -------- 
diff --git a/howto/new-command.html b/howto/new-command.html index 78d3b88..b2815f2 100644 --- a/howto/new-command.html +++ b/howto/new-command.html 
@@ -863,7 +863,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-22 18:02:58 PDT  + 2020-03-25 14:28:42 PDT   </div>   </div>   </body>  
diff --git a/howto/rebase-from-internal-branch.html b/howto/rebase-from-internal-branch.html index 7509e95..3699169 100644 --- a/howto/rebase-from-internal-branch.html +++ b/howto/rebase-from-internal-branch.html 
@@ -895,7 +895,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-22 18:03:02 PDT  + 2020-03-25 14:28:48 PDT   </div>   </div>   </body>  
diff --git a/howto/rebuild-from-update-hook.html b/howto/rebuild-from-update-hook.html index 93f5f2c..f31c295 100644 --- a/howto/rebuild-from-update-hook.html +++ b/howto/rebuild-from-update-hook.html 
@@ -847,7 +847,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-22 18:03:01 PDT  + 2020-03-25 14:28:47 PDT   </div>   </div>   </body>  
diff --git a/howto/recover-corrupted-blob-object.html b/howto/recover-corrupted-blob-object.html index 756a0b8..c5bb93f 100644 --- a/howto/recover-corrupted-blob-object.html +++ b/howto/recover-corrupted-blob-object.html 
@@ -880,7 +880,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-22 18:03:01 PDT  + 2020-03-25 14:28:46 PDT   </div>   </div>   </body>  
diff --git a/howto/recover-corrupted-object-harder.html b/howto/recover-corrupted-object-harder.html index 0f988f2..f89986c 100644 --- a/howto/recover-corrupted-object-harder.html +++ b/howto/recover-corrupted-object-harder.html 
@@ -1189,7 +1189,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-22 18:03:01 PDT  + 2020-03-25 14:28:47 PDT   </div>   </div>   </body>  
diff --git a/howto/revert-a-faulty-merge.html b/howto/revert-a-faulty-merge.html index 26f4b32..4e29ea6 100644 --- a/howto/revert-a-faulty-merge.html +++ b/howto/revert-a-faulty-merge.html 
@@ -1025,7 +1025,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-22 18:03:01 PDT  + 2020-03-25 14:28:46 PDT   </div>   </div>   </body>  
diff --git a/howto/revert-branch-rebase.html b/howto/revert-branch-rebase.html index f562b8b..4840f3f 100644 --- a/howto/revert-branch-rebase.html +++ b/howto/revert-branch-rebase.html 
@@ -907,7 +907,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-22 18:02:59 PDT  + 2020-03-25 14:28:42 PDT   </div>   </div>   </body>  
diff --git a/howto/separating-topic-branches.html b/howto/separating-topic-branches.html index f9773ea..f1510bc 100644 --- a/howto/separating-topic-branches.html +++ b/howto/separating-topic-branches.html 
@@ -841,7 +841,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-22 18:03:01 PDT  + 2020-03-25 14:28:45 PDT   </div>   </div>   </body>  
diff --git a/howto/setup-git-server-over-http.html b/howto/setup-git-server-over-http.html index e1c428c..16ebb4d 100644 --- a/howto/setup-git-server-over-http.html +++ b/howto/setup-git-server-over-http.html 
@@ -1071,7 +1071,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-22 18:03:00 PDT  + 2020-03-25 14:28:45 PDT   </div>   </div>   </body>  
diff --git a/howto/update-hook-example.html b/howto/update-hook-example.html index 806c02f..23dc6d7 100644 --- a/howto/update-hook-example.html +++ b/howto/update-hook-example.html 
@@ -930,7 +930,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-22 18:03:00 PDT  + 2020-03-25 14:28:44 PDT   </div>   </div>   </body>  
diff --git a/howto/use-git-daemon.html b/howto/use-git-daemon.html index 1fb856b..d82b91c 100644 --- a/howto/use-git-daemon.html +++ b/howto/use-git-daemon.html 
@@ -791,7 +791,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-22 18:03:00 PDT  + 2020-03-25 14:28:44 PDT   </div>   </div>   </body>  
diff --git a/howto/using-merge-subtree.html b/howto/using-merge-subtree.html index 41b4ca1..269561d 100644 --- a/howto/using-merge-subtree.html +++ b/howto/using-merge-subtree.html 
@@ -848,7 +848,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-22 18:02:59 PDT  + 2020-03-25 14:28:43 PDT   </div>   </div>   </body>  
diff --git a/howto/using-signed-tag-in-pull-request.html b/howto/using-signed-tag-in-pull-request.html index abdf447..46ebea7 100644 --- a/howto/using-signed-tag-in-pull-request.html +++ b/howto/using-signed-tag-in-pull-request.html 
@@ -952,7 +952,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-22 18:02:59 PDT  + 2020-03-25 14:28:43 PDT   </div>   </div>   </body>